package com.shujia.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo7Action {
  def main(args: Array[String]): Unit = {

    /**
      * spark 任务的层级关系
      * application --->  job  -->  stage --> task
      *
      */

    val conf: SparkConf = new SparkConf()
      .setAppName("Demo5FlatMap")
      .setMaster("local")

    val sc = new SparkContext(conf)

    /**
      * action算子   -- 触发任务执行，每一个action算子都会触发一个job任务
      * 1、foreach: 遍历rdd
      * 2、saveAsTextFile : 保存数据
      * 3、count : 统计rdd的行数
      * 4、collect: 将rdd转换成scala的集合
      */


    val studentsRDD: RDD[String] = sc.textFile("data/students.txt")

    /**
      * foreach: 一次遍历一条数据
      * foreachPartition： 一次遍历一个分区
      *
      */
    studentsRDD.foreach(println)

    studentsRDD.foreachPartition((iter: Iterator[String]) => println(iter.toList))

    /**
      * saveAsTextFile: 将数据保存到hdfs,
      * 1、输出目录不能存在
      * 2、rdd一个分区对应一个文件
      *
      */

    //studentsRDD.saveAsTextFile("data/temp2")

    /**
      *count: 统计行数
      *
      */

    val count: Long = studentsRDD.count()
    println(s"studentsRDD的行数：$count")


    /**
      * collect: 将rdd的数据拉取到内存中，
      * 如果数据量很大，会出现内存溢出
      *
      */

    val studentArr: Array[String] = studentsRDD.collect()
    println(studentArr)



    while (true) {

    }

  }

}
